package com.example.service.impl;

import com.example.common.Page;
import com.example.common.Result;
import com.example.mapper.BookMapper;
import com.example.pojo.Book;
import com.example.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Objects;

@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookMapper bookMapper;

    /* 4个条件（可填）和2个页码信息 */
    /* bookName、author、begin、end */
    @Override
    public Page<Book> selectByPage(Page<Book> page) {
        // 输出总数据条数、总页数和表格所需要的集合数据
        // 总数据条数（需要根据条件查吗？符合查询条件的总数据量）：查sql
        // 总页数：总数据条数和每页的数量有关系（计算）
        int totalCount =
                bookMapper.queryTotalByPage(page.getParams());
        page.setTotalCount(totalCount);
        // 集合数据（需要根据条件查的）：查sql
        // 通过pageSize和currentPage计算start、count
        // 页码：1，每页数量：10，start：0，count：10
        // 页码：2，每页数量：10，start：10，count：10
        int start = (page.getCurrentPage() - 1) * page.getPageSize();
        page.getParams().put("start", start);
        page.getParams().put("count", page.getPageSize());
        List<Book> books =
                bookMapper.queryBookByPage(page.getParams());
        page.setData(books);
        return page;
    }

    @Override
    public Object addBook(Book book) {
        // 先做基础校验
        // 关键信息不能为空
        if (book.getBookName() == null ||
                Objects.equals(book.getBookName(), "")) {
            // 直接返回失败的结果对象，具备了code、msg的结果对象
            return Result.error("请填写书名");
        }
        if (book.getAuthor() == null ||
                Objects.equals(book.getAuthor(), "")) {
            return Result.error("请填写作者");
        }
        // 书名不能重复，根据bookName去查，有数据就是重复
        if(bookMapper.queryCountByBookName(book.getBookName()) > 0){
            return Result.error("书名已存在");
        }
        // 修改数据，服务端获取当前时间
        book.setPublished(new Date());
        book.setIsActive(1);
        // 存入数据库
        if(bookMapper.addBook(book) > 0) {
            return Result.success("新增成功");
        } else {
            return Result.error("新增失败");
        }
    }

    @Override
    public Object getBookById(int id) {
        // 前端发过来的id是有可能查询不到的
        Book book = bookMapper.getBookById(id);
        if(book != null) {
            return Result.success(book);
        } else {
            return Result.error("数据已不存在");
        }
    }

    @Override
    public Object updateBook(Book book) {
        // 关键信息不能为空
        if (book.getBookName() == null ||
                Objects.equals(book.getBookName(), "")) {
            // 直接返回失败的结果对象，具备了code、msg的结果对象
            return Result.error("请填写书名");
        }
        if (book.getAuthor() == null ||
                Objects.equals(book.getAuthor(), "")) {
            return Result.error("请填写作者");
        }
        // 先把原来的名字查出来
        Book oldBook = bookMapper.getBookById(book.getId());
        if (oldBook.getBookName().equals(book.getBookName())) {
            // 重复的判断，自己书名没改变
            if(bookMapper.queryCountByBookName(book.getBookName()) > 1){
                return Result.error("书名已存在");
            }
        } else {
            // 重复的判断，自己书名变了
            if(bookMapper.queryCountByBookName(book.getBookName()) > 0){
                return Result.error("书名已存在");
            }
        }
        if(bookMapper.updateBook(book) > 0) {
            return Result.success("修改成功");
        } else {
            return Result.error("修改失败");
        }
    }

    @Override
    public Object deleteBookById(int id) {
        if(bookMapper.deleteBookById(id) > 0) {
            return Result.success("删除成功");
        } else {
            return Result.error("删除失败");
        }
    }
}
